package com.waji.controller;

import java.io.*;
import java.net.Inet4Address;
import java.net.InetSocketAddress;
import java.net.Socket;
public class Client1 {
    //java基础类方法的入口
    public static void main(String[] args)throws IOException {
        Socket socket=new Socket();
        //读取流超时的时间设置为3000
        socket.setSoTimeout(3000);
        //连接本地，端口2000；超时时间3000ms
        socket.connect(new InetSocketAddress(Inet4Address.getLocalHost(), 2000),3000);
        System.out.println("发起服务器连接咯，继续进入后续流程啦啦~");
        System.out.println("客户端信息就是~："+socket.getLocalAddress()+" P:"+socket.getLocalPort());//打印本地服务器地址和本地端口号
        System.out.println("服务端信息就是~："+socket.getInetAddress()+" P:"+socket.getPort());
        try{
            //发送接收数据
            todo(socket);
        }catch (Exception e){
            System.out.println("竟然出现异常关闭啦");
        }
        //释放资源
        socket.close();
        System.out.println("拜拜，客户端已退出~");
    }
    //发送数据的方法
    private  static void todo(Socket client) throws IOException{
        //构建键盘输入流
        InputStream in=System.in;
        //把键盘输入流转换为BufferedReader
        BufferedReader input=new BufferedReader(new InputStreamReader(in,"UTF-8"));
        //得到Socket输出流（Client要发送出去给服务器的信息），并转换为打印流
        OutputStream outputStream = client.getOutputStream();
        PrintStream socketPrintStream=new PrintStream(outputStream);
        //得到Socket输入流（Server回复传入Client的信息）,并转换为BufferedReader
        InputStream inputStream = client.getInputStream();
        BufferedReader socketBufferedReader=new BufferedReader(new InputStreamReader(inputStream,"UTF-8"));
        //判断Server是否想要退出，回复“bye”时是他想要结束对话
        boolean flag=true;
        do {
            //键盘读取一行
            String str = input.readLine();
            //发送到服务器，（通俗就是显示在输入处，在键盘上输入什么，屏幕显示什么）
            socketPrintStream.println(str);
            //从服务器读取一行，即Server传入回复给Client的信息
            String echo = socketBufferedReader.readLine();
            if("bye".equalsIgnoreCase(echo)){
                flag=false;
            } else{
                //打印到屏幕上，Server回复什么就显示什么
                System.out.println("Client回复："+echo);
            }
        }while(flag);
        //资源释放，关闭对于socket资源
        socketPrintStream.close();
        socketBufferedReader.close();
    }
}
